package com.grt.condify.common.filter;



/**
 * 拦截接口,用户能够通过定义拦截行为从而在允许接入拦截的方法中使用该接口
 * <p>
 * 只要通过doFilter方法满足了判断条件,即将命中内容记录下来,通过getHitFilter得到命中, 而isHit方法无论传入什么值,返回结果只与{@code hitOne}属性是否为空有关<p/>
 * <p>
 * T:表示被拦截的具体内容
 * <p>
 * 例如,实现一个拦截字符串不为空的拦截器: <p/>
 * Filters[String] notNull = new SimpleFilter(){    <p/>
 * void doFilter(String currFilter) throws RuntimeException {  <p/>
 * if(!StringUtils.isNullOrEmpty(currFilter))  <p/>
 * hitOne = currFilter;    <p/>
 * }   <p/>
 * }    <p/>
 * <p>
 * <p>
 * Created by cy on 16/6/1.
 */
public abstract class SimpleFilter<T> implements IFilter<T> {

    protected T hitOne = null;

    /**
     * 判断是否命中了指定了内容
     * 在该类中,我们不关心传入的内容,只要存在命中,变为true
     *
     * @param currentContent 待判断的内容,这里传任何值都没有意义
     * @return true 表示命中
     */
    @Override
    public boolean isHit(String currentContent) {
        return hitOne != null;
    }

    /**
     * 判断是否命中了指定了内容
     *
     * @param currentContent 待判断的内容,这里传任何值都没有意义
     * @return true 表示命中
     */
    @Override
    public boolean isHit(Class<?> currentContent) {
        return isHit("");
    }

    /**
     * 得到当前命中的Filter
     *
     * @return 命中的Filter
     */
    @Override
    public T getHitFilter() {
        return hitOne;
    }
}
